package com.koalac.ironman.util;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnKeyListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.RelativeLayout;

import com.foot.travel.R;

/**
 * 对话框封装类
 * 
 * @author chenxiaohua
 * 
 */
public class DialogUtils {

	public static final int NO_ICON = -1; // 无图标

	/**
	 * 创建消息对话框
	 * 
	 * @param context
	 *            上下文 必填
	 * @param iconId
	 *            图标，如：R.drawable.icon 或 DialogTool.NO_ICON 必填
	 * @param title
	 *            标题 必填
	 * @param message
	 *            显示内容 必填
	 * @param btnName
	 *            按钮名称 必填
	 * @param listener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @return
	 */
	public static AlertDialog createMessageDialog(Context context, String title, String message, String btnName,
			OnClickListener listener, int iconId) {
		AlertDialog.Builder builder = new AlertDialog.Builder(context);

		// 设置对话框图标
		if (iconId != NO_ICON) {
			builder.setIcon(iconId);
		}
		// 设置对话框标题
		builder.setTitle(title);

		// 设置对话框消息
		if (message != null && message.length() > 0) {
			builder.setMessage(message);
		}

		// 设置按钮
		builder.setPositiveButton(btnName, listener);
		// 创建一个消息对话框
		return builder.create();
	}

	/**
	 * 创建警示（确认、取消）对话框
	 * 
	 * @param context
	 *            上下文 必填
	 * @param iconId
	 *            图标，如：R.drawable.icon 或 DialogTool.NO_ICON 必填
	 * @param title
	 *            标题 必填
	 * @param message
	 *            显示内容 必填
	 * @param positiveBtnName
	 *            确定按钮名称 必填
	 * @param negativeBtnName
	 *            取消按钮名称 必填
	 * @param positiveBtnListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @param negativeBtnListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @return
	 */
	private static OnKeyListener keylistener = new DialogInterface.OnKeyListener(){
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            if (keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0)
            {
             return true;
            }
            else
            {
             return false;
            }
        }
    } ;
    
	public static AlertDialog createConfirmDialog(Context context, String title, String message,
			String positiveBtnName, String negativeBtnName, OnClickListener positiveBtnListener,
			OnClickListener negativeBtnListener, int iconId,boolean isCanceledOnTouchOutsided) {
		AlertDialog.Builder builder = new AlertDialog.Builder(context);

		// 设置对话框图标
		if (iconId != NO_ICON) {
			builder.setIcon(iconId);
		}
		// 设置对话框标题
		builder.setTitle(title);
		// 设置对话框消息
		if (message != null && message.length() > 0) {
			builder.setMessage(message);
		}
		// 设置确定按钮
		builder.setPositiveButton(positiveBtnName, positiveBtnListener);
		// 设置取消按钮
		builder.setNegativeButton(negativeBtnName, negativeBtnListener);
		// 创建一个消息对话框
		AlertDialog alertDialog = builder.create();
		if(isCanceledOnTouchOutsided){
		  alertDialog.setOnKeyListener(keylistener);
		  alertDialog.setCanceledOnTouchOutside(isCanceledOnTouchOutsided);
		}
		return alertDialog;
	}

	/**
	 * 创建单选对话框
	 * 
	 * @param context
	 *            上下文 必填
	 * @param iconId
	 *            图标，如：R.drawable.icon 或 DialogTool.NO_ICON 必填
	 * @param title
	 *            标题 必填
	 * @param itemsString
	 *            选择项 必填
	 * @param positiveBtnName
	 *            确定按钮名称 必填
	 * @param negativeBtnName
	 *            取消按钮名称 必填
	 * @param positiveBtnListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @param negativeBtnListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @param itemClickListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @return
	 */
	public static AlertDialog createSingleChoiceDialog(Context context, String title, String[] itemsString,
			String positiveBtnName, String negativeBtnName, OnClickListener positiveBtnListener,
			OnClickListener negativeBtnListener, OnClickListener itemClickListener, int iconId) {

		AlertDialog.Builder builder = new AlertDialog.Builder(context);

		// 设置对话框图标
		if (iconId != NO_ICON) {
			builder.setIcon(iconId);
		}
		// 设置对话框标题
		builder.setTitle(title);
		// 设置单选选项, 参数0: 默认第一个单选按钮被选中
		builder.setSingleChoiceItems(itemsString, 0, itemClickListener);
		// 设置确定按钮
		builder.setPositiveButton(positiveBtnName, positiveBtnListener);
		// 设置确定按钮
		builder.setNegativeButton(negativeBtnName, negativeBtnListener);
		// 创建一个消息对话框
		return builder.create();
	}
	
	

	/**
	 * 创建复选对话框
	 * 
	 * @param context
	 *            上下文 必填
	 * @param iconId
	 *            图标，如：R.drawable.icon 或 DialogTool.NO_ICON 必填
	 * @param title
	 *            标题 必填
	 * @param itemsString
	 *            选择项 必填
	 * @param positiveBtnName
	 *            确定按钮名称 必填
	 * @param negativeBtnName
	 *            取消按钮名称 必填
	 * @param positiveBtnListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @param negativeBtnListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @param itemClickListener
	 *            监听器，需实现android.content.DialogInterface.
	 *            OnMultiChoiceClickListener;接口 必填
	 * @return
	 */
	public static AlertDialog createMultiChoiceDialog(Context context, String title, String[] itemsString,
			String positiveBtnName, String negativeBtnName, OnClickListener positiveBtnListener,
			OnClickListener negativeBtnListener, OnMultiChoiceClickListener itemClickListener, int iconId) {

		AlertDialog.Builder builder = new AlertDialog.Builder(context);

		// 设置对话框图标
		if (iconId != NO_ICON) {
			builder.setIcon(iconId);
		}
		// 设置对话框标题
		builder.setTitle(title);
		// 设置选项
		builder.setMultiChoiceItems(itemsString, null, itemClickListener);
		// 设置确定按钮
		builder.setPositiveButton(positiveBtnName, positiveBtnListener);
		// 设置确定按钮
		builder.setNegativeButton(negativeBtnName, negativeBtnListener);
		// 创建一个消息对话框
		return builder.create();
	}

	/**
	 * 创建列表对话框
	 * 
	 * @param context
	 *            上下文 必填
	 * @param iconId
	 *            图标，如：R.drawable.icon 或 DialogTool.NO_ICON 必填
	 * @param title
	 *            标题 必填
	 * @param itemsString
	 *            列表项 必填
	 * @param negativeBtnName
	 *            取消按钮名称 必填
	 * @param negativeBtnListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @return
	 */
	public static AlertDialog createListDialog(Context context, String title, String[] itemsString,
			String negativeBtnName, OnClickListener negativeBtnListener, OnClickListener itemClickListener, int iconId) {
		AlertDialog.Builder builder = new AlertDialog.Builder(context);

		// 设置对话框图标
		if (iconId != NO_ICON) {
			builder.setIcon(iconId);
		}
		// 设置对话框标题
		builder.setTitle(title);
		// 设置列表选项
		builder.setItems(itemsString, itemClickListener);
		// 设置确定按钮
		builder.setNegativeButton(negativeBtnName, negativeBtnListener);
		// 创建一个消息对话框
		return builder.create();
	}

	/**
	 * 创建自定义（含确认、取消）对话框
	 * 
	 * @param context
	 *            上下文 必填
	 * @param iconId
	 *            图标，如：R.drawable.icon 或 DialogTool.NO_ICON 必填
	 * @param title
	 *            标题 必填
	 * @param positiveBtnName
	 *            确定按钮名称 必填
	 * @param negativeBtnName
	 *            取消按钮名称 必填
	 * @param positiveBtnListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @param negativeBtnListener
	 *            监听器，需实现android.content.DialogInterface.OnClickListener接口 必填
	 * @param view
	 *            对话框中自定义视图 必填
	 * @return
	 */
	public static AlertDialog createCustomWithBtnDialog(Context context, String title, String positiveBtnName,
			String negativeBtnName, OnClickListener positiveBtnListener, OnClickListener negativeBtnListener,
			View view, int iconId) {
		AlertDialog.Builder builder = new AlertDialog.Builder(context);

		// 设置对话框图标
		if (iconId != NO_ICON) {
			builder.setIcon(iconId);
		}
		// 设置对话框标题
		builder.setTitle(title);
		builder.setView(view);
		// 设置确定按钮
		builder.setPositiveButton(positiveBtnName, positiveBtnListener);
		// 设置确定按钮
		builder.setNegativeButton(negativeBtnName, negativeBtnListener);
		// 创建一个消息对话框
		return builder.create();
	}
	
	/**
	 *  自定义弹出框
	 * @param context
	 * @param view
	 * @return
	 */
	@SuppressLint("NewApi")
	public static Dialog createCustomDialog(Context context, View view) {
		Dialog dialog = new Dialog(context, R.style.customDialogTheme);
		RelativeLayout.LayoutParams lp = new RelativeLayout. LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		lp.width = ScreenInfoUtil.getScreenWidth(context) - ScreenInfoUtil.dp2px(context, 60);
		lp.addRule(RelativeLayout.CENTER_IN_PARENT);
		dialog.addContentView(view,lp);
		dialog.setOnKeyListener(keylistener);
		dialog.setCanceledOnTouchOutside(true);
		dialog.setCancelable(true);
		dialog.getWindow().setGravity(Gravity.CENTER);
		return dialog;
	}
	/**
	 * 针对activity出现的dialog
	 * @param activity
	 */
	public static void justShowDialog(final Activity activity,String message) {
		DialogUtils.createConfirmDialog(activity, "",
				message, "取消", "确定",
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						dialog.dismiss();
					}
				}, new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						dialog.dismiss();
						activity.finish();
					}
				}, DialogUtils.NO_ICON, false).show();
	}
}